xctf攻防世界 CRYPTO高手进阶区 Decode

您所在的位置:网站首页 xctf crypto xctf攻防世界 CRYPTO高手进阶区 Decode

xctf攻防世界 CRYPTO高手进阶区 Decode

2024-05-22 17:49| 来源: 网络整理| 查看: 265

xctf攻防世界 CRYPTO高手进阶区 Decode_The_File 原创

l8947943s 2022-10-21 16:41:41 ©著作权

文章标签 crypto git javascript 问题分析 文章分类 运维

©著作权归作者所有:来自51CTO博客作者l8947943s的原创作品,请联系作者获取转载授权,否则将追究法律责任

0x01. 进入环境,下载附件

题目给出了一个无后缀文件,使用txt打开,如图:

xctf攻防世界 CRYPTO高手进阶区 Decode_The_File_crypto

0x02. 问题分析

可以看出,题目包含的内容就是base64字符,想办法接触base64编码内容即可。但是这么多编码信息,如何拿到flag?

解题过程参考大佬的博客,在此引用一张图片:

xctf攻防世界 CRYPTO高手进阶区 Decode_The_File_crypto_02

在这里,说明加密后的填充位0,解码过程中,即使当xctf攻防世界 CRYPTO高手进阶区 Decode_The_File_git_03,解码过程也能正确进行。那么也就是可以使用xctf攻防世界 CRYPTO高手进阶区 Decode_The_File_问题分析_04传递一些信息。因此,将编码中的ai提取出来

0x03. 直接上代码

from string import ascii_uppercase, ascii_lowercase, digitsfrom Crypto.Util.number import long_to_bytes

def solve(): with open('pic/1a351e90fb2b476a929d1e2666d7c511', 'r') as file: f = file.read() lc = f.split('\n')[:-1] # split最后一个字符为空,因此要去到倒数第二个 # base就是对应的64个字符 base = ascii_uppercase + ascii_lowercase + digits + '+/'

re2 = [] for code in lc: if '==' in code: # 如果是编码一个字节 re2.append(bin(base.find(code[-3]))[2:].rjust(6, '0')[2:]) elif '=' in code: # 如果是编码两个字节 re2.append(bin(base.find(code[-2]))[2:].rjust(6, '0')[4:]) ret = ''.join(re2) return long_to_bytes(int(ret[:ret.rfind('1') + 1], 2), 2).decode()

if __name__ == '__main__': print(solve())

运行后,最终的答案为:​​ROIS{base_GA_caN_b3_d1ffeR3nT}​​

最后,base64编码的原理一定要知道,后续作为内容进行整理!

收藏 评论 分享 举报

上一篇:xctf攻防世界 REVERSE 薪手练习区(一)

下一篇:xctf攻防世界 CRYPTO高手进阶区 enc



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3